//
// a doubly linked lists
//

#ifndef DLIST_H
#define DLIST_H

//
struct Node;
typedef struct Node *dlist;

//
// create a double link
//
dlist dl_create(void);

//
// destroy a double link
// dl: beginning of double link list
//
void dl_destroy(dlist dl);

//
// add a new value after a specified
// double link list node
//
void *dl_add_after(dlist dl, void *value);

//
// remove a node after a specified
// double link list node
//
void *dl_remove_after(dlist dl);

//
// return next node
//
dlist dl_next(dlist dl);

//
// return value in node
//
void* dl_get_value(dlist dl);

//
// print all values in double list
//
void dl_print(dlist start);

#endif // DLIST_H
